Graphics packages are currently available for rendering images such as printed pages to printers, display screens, or for output to software files to be stored in storage devices. Some of these graphics packages utilise a high-level page description language for effecting the layout of the printed pages. These graphics packages typically comprise a rendering system, which converts the high-level page description of the page layout into pixel data that can be used as raster data to be printed or displayed.
Computer-generated images are typically made up of many different components or graphical elements which are rendered and composited together to create a final image. The rendering and compositing may be performed by special-purpose hardware, or by software running on a general or special-purpose computer system, such as a microprocessor inside a printer. These graphical elements are processed by a document interpreter within the rendering system, which sends drawing commands across a drawing interface. From the drawing commands, a final description of the page to be printed is generated, which comprises a description of each graphical element. Examples of graphical elements include text strings, paths and images. This final description is called a display list. The display list is then spooled (ie transferred) to a print engine in the target printer.
In order to achieve faithful colour reproduction, applications that create high-level page descriptions will sometimes represent different graphical elements using a colour space, or more specifically a colour encoding.
Colour conversion (sometimes called colour space conversion) is the process of converting one or more colours that are represented using a particular colour encoding (called the input colour encoding) to a new representation using a different colour encoding (called the output colour encoding).
Colour conversion is usually performed by means of a colour conversion transform (often called a “colour transform” for brevity). A colour transform is a mathematical filter that, when the numeric parameters of a colour in an input colour encoding is provided to it as input, produces the numerical parameters of a colour in an output colour encoding that represents an equivalent colour.
Mathematical transforms that are associated with a colour space may be used for converting from one colour encoding to another colour encoding through an intermediate device-independent colour space. When such a conversion is required the mathematical transforms may be evaluated or implemented numerically using computer software. The evaluation typically involves the construction and subsequent interpolation of single-dimensional or multi-dimensional lookup tables. The construction and interpolation operations are frequently computationally intensive, requiring significant amounts of computer memory and central processing unit (CPU) time.
Typically, in order to increase the speed at which colour conversion can be performed, a colour transform combines what is usually a multi-stage mathematical process into a very small number of stages, by generating look-up tables or other intermediate data. As a result, colour transforms are often computationally expensive to create. A known technique of mitigating this computational cost is caching. For example, if a rendering system is required to colour convert an object from its input colour encoding to a common rendering colour encoding, the rendering system will create a colour transform that can perform the conversion, use it, and then store the colour transform in memory, so that if the same conversion needs to be performed on a subsequent object, the colour transform can be retrieved from memory instead of re-creating it, improving the performance of the rendering system.
The terms colour space and colour encoding are sometimes used interchangeably; in this specification a distinction is made. A colour space (sometimes called a colour model) is mathematical abstraction consisting of an ordered set of primary colours (or primaries). Colours within the colour space are specified by an ordered list of numbers corresponding to the primaries. For example, RGB is a family of additive colour spaces in which colours are defined by three numbers, corresponding to the red, green, and blue primaries. All colours defined by that colour space are defined as an additive mixture of particular amounts of red, green, and blue. (Not all colour spaces are additive.)
A colour encoding is a fuller specification that incorporates the colour space, such as RGB, and additional properties such as white point, gamma, gamut, and chromaticity of the primaries of the colour space, that allows colours in the colour encoding to be accurately converted to different colour encoding representations, and ultimately to be reproduced correctly on an output device. These properties are called colour encoding parameters. For a single colour space, there can exist many possible colour encodings, each having differences in one or more colour encoding parameter values to other colour encodings.
Colour profiles and colour management systems may be used for the unambiguous communication of colour information. A colour profile is a software container which includes a colour encoding specification in addition to one or more colour transforms used to transform colours from the profiles colour encoding to a new colour encoding. The colour encoding transforms, ie the colour transforms associated with a particular colour encoding, are typically used to convey information about colour reproduction intents. The information is conveyed from devices and systems that create colour images or documents to devices or systems that display or print colour images or documents.
The number of colour encodings in practical use has continued to increase to the point where there are many thousands in current use. The proliferation of colour encodings provides a very high level of flexibility but also carries with it a significant inefficiency. The inefficiency comes about in the computer computation time and memory required to build numerical implementations of many different colour encoding transforms.
The inefficiency of dealing with a large diversity of colour encodings is reflected in the cost and sophistication of the equipment required for rendering, displaying and/or printing colours. The inefficiency of dealing with a large diversity of colour encodings is also reflected in the time taken to perform the rendering. Time taken to build colour encoding transforms can result in speed losses that make rendering operations unviable. The time taken to build colour encoding transforms may also result in significant productivity losses in production printing applications.
Another method to increase the speed of colour conversion is to pre-build colour transforms that are known to be popular. For example, a CalRGB colour encoding in the Adobe Portable Document Format (PDF) with a standard D50 white point (0.9643, 1.000, 0.8251), gamma of 2.2, and sRGB chromaticities is a popular colour encoding, and so the colour transform that converts a colour from this colour encoding to another particular encoding can be created before any image data is processed, and used whenever a colour encoding is encountered that matches this encoding.
However, colour encoding parameters are specified using a floating point representation, and many of these parameters are derived values. The accuracy with which a calculation is performed to arrive at a derived value, or the number of decimal places stored in the floating point representation, or rounding decisions made by programmers or graphic artists at many stages along the production of these values, can all lead to slight variations in the exact values. For example, an application that produces a colour encoding having a white point of (0.96421, 1.00000, 0.82519) would fail to re-use a pre-built colour transform for a colour encoding having a white point of (0.9643, 1.0000, 0.8251) in a rendering system that tests for equal colour encoding parameters when deciding whether to re-use a pre-built transform.
One solution to this problem is to allow a numerical margin of error when comparing colour encoding parameter values. The drawback to this solution is that there exist many colour encodings for which a small variation in some colour encoding parameters will produce a large visual difference. Conversely, there can exist colour encodings that are visually very similar but with significant numerical differences. Therefore, this approach introduces an undesirable trade-off between colour accuracy and performance (via re-use of colour transforms).
Thus, a need clearly exists for a more efficient method of determining a representative colour encoding from a large number of candidate colour encodings.